package com.example.design_pattern.factory;

// 工厂方法模式（Factory Method）
// 意图: 定义一个创建对象的接口，但由子类决定要实例化的类，工厂方法模式让类的实例化延迟到子类。
// 使用场景:
// 需要在创建对象时使用继承来决定要创建的对象。
// 需要隐藏对象创建的具体实现。


//需要创建的对象的接口
abstract class Product {
    // Product methods
}

// 具体的子类
class ProductA extends Product {
    // ProductA methods
}

class ProductB extends Product {
    // ProductB methods
}


// 这个就是工厂类
abstract class Creator {
    public abstract Product factoryMethod();
}

// 专门创建productA的工厂
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ProductA();
    }
}

// 专门创建productB的工厂
class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ProductB();
    }
}

// 测试类
public class FactoryMethodExample {
    public static void main(String[] args) {
        // 以下代码创建出了产品A
        Creator creator = new ConcreteCreatorA();
        Product product = creator.factoryMethod();
        // Use the product
    }
}

